package com.tim.service.Impl;

import com.tim.dao.Impl.PlotDaoImpl;
import com.tim.dao.PlotDao;
import com.tim.pojo.DataResult;
import com.tim.pojo.Plot;
import com.tim.service.PlotService;

import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.List;

/**
 * 作者：Tim
 * 时间：2021/4/25 17:02
 */
public class PlotServiceImpl implements PlotService {
    PlotDao plotDao = new PlotDaoImpl();
    @Override
    public List<Plot> selectAll() {
        try {
            return plotDao.selectAll();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    @Override
    public int deletePlot(String id) {
        try {
            int plotid= Integer.parseInt(id);
            return plotDao.deletePlot(plotid);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return 0;
    }

    @Override
    public int addPlot(Plot plot) {
        try {
            return plotDao.addPlot(plot);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return 0 ;
    }

    @Override
    public Plot selectOne(String id) {
        try {
            int plotid = Integer.parseInt(id);
            return plotDao.selectOne(plotid);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    @Override
    public int updatePlot(Plot plot) {
        try {
            return plotDao.updatePlot(plot);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return 0;
    }

    @Override
    public List<Plot> searchPlot(String plotName) {
        try {
            return plotDao.searchPlot(plotName);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    @Override
    public int deleteAll(String[] ids) {
        //1、直接循环调用删除单个的方法(但是要考虑事务问题。解决方案：动态拼接Sql语句)
        for (String id : ids) {
            int count = deletePlot(id);
        }
        return ids.length;
    }

    /**
     * 导入文件添加小区
     * @param data
     * @return
     */
    @Override
    public int addAllPlot(List<String[]> data) {
        //1、直接循环调用添加单个的方法(但是要考虑事务问题。解决方案：动态拼接Sql语句)
        // insert into emp (,,,,) values(,,,,),(,,,,),(,,,,)

        if(data == null || data.size() == 0){
            return 0;
        }
        for(String[] row : data){//d 表示一行的数据
            //将一行的数据转换成一个Plot对象
            Plot plot = new Plot();
            //row[i] 表示Plot中的一个属性
            plot.setId(Integer.parseInt(row[0]));
            plot.setPlotNum(row[1]);
            plot.setPlotName(row[2]);
            plot.setPlotLocation(row[3]);
            plot.setPlotArea(Double.parseDouble(row[4]));
            plot.setBuildNum(Integer.parseInt(row[5]));
            plot.setFamilyNum(Integer.parseInt(row[6]));
            plot.setGreenRate(Double.parseDouble(row[7]));
            plot.setImage(row[8]);
            plot.setDeveloper(row[9]);
            plot.setTenementName(row[10]);
            try {
                plot.setDatecreated(new SimpleDateFormat("yyyy-MM-dd").parse(row[11]));
            } catch (ParseException e) {
                e.printStackTrace();
            }
            plot.setStatus(Integer.parseInt(row[12]));
            addPlot(plot);
        }
        return data.size();
    }

    @Override
    public DataResult limit(String currentPage, String pageSize,String plotName) {
        try {
            int p=1;//当前页
            int s=5; //每页条数
            if(currentPage!=null){
                p = Integer.parseInt(currentPage);
            }
            if(pageSize!=null){
                s =Integer.parseInt(pageSize);
            }
            List<Plot> plotList=plotDao.limit(p,s,plotName);
            //因为现在使用的是layui的表格渲染，所以返回到前端的数据使用要求的 1、要求code中0表示成功     2、如果开启分页那么必须要返回一个count的参数，表示总条数
            DataResult dataResult = new DataResult(0,"查询成功",plotList, plotDao.count(plotName));
            return dataResult;
        } catch (Exception e) {
            e.printStackTrace();
        }
        DataResult dataResult = new DataResult(100,"数据接口错误");
        return dataResult;
    }
}
